package com.xinqi.modules.chat.chat.friend.service;

import com.xinqi.modules.chat.chat.friend.dto.req.ChatFriendListQueryDTO;
import com.xinqi.modules.chat.chat.friend.dto.req.ChatFriendUpdateDTO;
import com.xinqi.modules.chat.chat.friend.dto.rsp.*;
import com.xinqi.modules.chat.chat.group.dto.req.ConversationSelectDTO;
import com.xinqi.modules.chat.chat.group.dto.req.GroupUserFriendQueryDTO;
import com.xinqi.modules.chat.chat.group.dto.rsp.ConversationResultDTO;
import com.xinqi.modules.chat.chat.group.dto.rsp.GroupUserFriendResultDTO;

import java.util.List;

/**
 * 好友列表服务层
 *
 * @author: system
 * @date: 2023/01/12
 */
public interface ChatFriendService {

    /**
     * 注册时初始化好友列表
     *
     * @param userId
     * @return
     */
    Boolean initFriend(Long userId);

    /**
     * 检查是否是好友
     *
     * @param userId   用户Id
     * @param friendId 好友账号
     * @return ChatFriendResultDTO
     */
    ChatFriendResultDTO friedCheck(Long userId, Long friendId);


    /**
     * 获取用户信息，与是否是好友
     *
     * @param query
     * @return
     */
    List<ChatFriendInfoResultDTO> userInfoByUserId(ChatFriendListQueryDTO query);

    /**
     * 获取指定用户好友列表-星标分类
     *
     * @param userId 用户Id
     * @return ChatFriendListTypeResultDTO
     */
    ChatFriendListTypeResultDTO friedListStarMark(Long userId);

    /**
     * 好友详情
     *
     * @param userId   当前用户Id
     * @param friendId 好友Id
     * @return ChatFriendDetailsResultDTO
     */
    ChatFriendDetailsResultDTO friedDetails(Long userId, Long friendId);

    /**
     * 设置好友
     *
     * @param userId 用户Id
     * @param dto    ChatFriendUpdateDTO
     * @return Boolean
     */
    Boolean setFriend(Long userId, ChatFriendUpdateDTO dto);

    /**
     * 删除用户好友
     *
     * @param userId   userId
     * @param friendId friendId
     * @return Boolean
     */
    Boolean deleteFriend(Long userId, Long friendId);

    /**
     * 获取指定用户好友列表
     *
     * @param dto
     * @return List
     */
    List<ChatFriendDetailsResultDTO> friedList(ChatFriendListQueryDTO dto);

    /**
     * 移除黑名单
     *
     * @param friendId
     * @param operationUserId
     * @return
     */
     Boolean removeChatFriendBlack(Long friendId, Long operationUserId);

    /**
     * 加入黑名单
     *
     * @param userId
     * @param operationUserId
     * @return
     */
     Boolean addChatFriendBlack(Long userId, Long operationUserId);

    /**
     * 查询黑名单列表
     *
     * @param query
     * @return
     */
     List<ChatFriendBlackListDto> blacklist(ChatFriendBlackListDto query);

    /**
     * 账号注销
     * 删除自己全部好友
     *
     * @param userId
     * @return
     */
    Boolean deleteFriendByUserId(Long userId);

    /**
     * 好友汇总列表只包含头像名称和会话ID
     *
     * @param dto
     * @return
     */
     List<ConversationResultDTO> selectConversation(ConversationSelectDTO dto);

    /**
     * 查询非群员的好友
     *
     * @param dto
     * @return
     */
     List<GroupUserFriendResultDTO> groupUserFriend(GroupUserFriendQueryDTO dto);

}
